Interactive computer graphics is the designation given to an area of computer graphics in which the user of the computer can dynamically control the content, format, size and colors of the picture on a computer video display. These capabilities have had particular relevance in a growing list of uses such as computer-aided design (CAD), simulation, process control and electronic publication, to name a few. While applications of interactive computer graphics to these uses have developed, display capabilities on existing computer graphics systems have become inadequate as users have come to expect and demand greater sophistication and speed from the systems. A good example of a display capability that has fallen victim to these increasing user expectations is the display cursor available on previously existing systems.
The cursor is an indicator which appears on the display screen identifying to the user where he is in the image. In other words, it appears over the image generated by a user application program and indicates the location in the image about which the user can either request further information or modify the image in some way. The cursor may be any of a variety of shapes ranging from the ordinary blinking rectangle commonly found on terminals to other more complicated shapes such as an arrow or a pair of intersecting lines crossing the display screen to form a hairline cursor.
Generally, a "mouse" or a "joy stick" determines the cursor's position on the display. These devices are mechanical controls which translate physical movement of the device into signals which control the movement of the cursor on the display. Thus, by physically moving the device, the user can move the cursor to any desired position on the image.
To understand how the cursor is generated it is necessary to have a basic understanding about the source of the image appearing on the display. Generally, the image display system on a video terminal utilizes a frame buffer to store information which is to be written onto the display. The frame buffer, also referred to as a bit map, is essentially a memory array wherein each location in the array is identified by both its column and its row position in the array. Located at each address in the memory array is information about the signal which will be sent to a corresponding location on the display. Thus, in a typical color display system which generates images by using combinations of the three basic colors, namely, red, green and blue, the information at an address in the frame buffer specifies the intensity of each of the three basic colors that will appear at the corresponding location on the display. The stored information must typically be a multi-bit word in order to be capable of representing more than two colors. Thus, for example, by using a three bit wide word, a maximum of 2.sup.3 (or 8 ) different colors are available. In this case the frame buffer is essentially a three-plane memory in which each of the three bits is stored at the same address in a different, corresponding plane of the memory.
Achieving an acceptable image on the display requires that the image from the frame buffer be written onto the display at a rate of approximately 60 times per second, sometimes referred to as the refresh rate. This refresh rate is necessary to generate an image which appears continuous. If the rate is much lower than this, the user will perceive the successive writing of contents of the frame buffer to the screen as a disturbing flicker of the resulting image.
Historically, the cursor has been generated by software and then added to the contents of the frame buffer, replacing or modifying the image information in the buffer address positions where the cursor is to appear. Thus, when the contents of the frame buffer are written onto the display during a refresh cycle, the display shows the cursor in the desired location. Generally, several different approaches have been employed to accomplish this.
According to one approach, the cursor information is written into the frame buffer at the desired address locations, completely replacing the image information which was previously contained at those locations. The displaced image information could not simply be discarded, however, because when the cursor is moved to a different location, the image which was hidden by the cursor must reappear. To avoid the time-consuming task of having to recompute the image information, the displaced image information is simply stored in a temporary memory location until required. Thus, when the cursor is moved, the information describing the image which lay beneath the cursor is retrieved from the temporary memory and written into the appropriate frame buffer locations and the newly displaced image information in the frame buffer is transferred to the temporary memory for later retrieval. The problem with this approach, however, is that considerable computational overhead and delay is associated with this transferring process and the accounting which must necessarily accompany it.
Furthermore, modifying portions of the displayed image which are obscured by the cursor presents added difficulties. Before an underlying image which is partially obscured by the cursor can be changed, the cursor must be moved. If it is not moved, changes to the image may not be recorded for the obscured regions. Thus, when the cursor is moved after the displayed image has been changed, a "hole" may exist in the image where the cursor was located. Moving the cursor out of the way while changes to the image are implemented is typically the responsibility of the applications program. In other words, the applications program must determine whether the cursor obscures an area which is to be changed and, if it does, the program must move the cursor, retrieve the underlying image data from the temporary memory, modify the image as requested and then, after saving the underlying image data back to the temporary memory, replace the cursor. Understandably, this increases the time it takes to update the image and it requires committing greater computational resources to maintaining the cursor.
The second approach avoids some of these problems by preserving the image information in the frame buffer. According to this approach, one plane of the frame buffer, which may be designated a cursor plane, is dedicated to storing a bit which specifies whether a cursor will appear at that location. The basic image information describing the image is stored in the remaining planes and need not be changed under this approach. When the bit in the cursor plane indicates that a cursor appears at that location, the display responds by displaying a preselected color assigned to the cursor. Although the back and forth transferring of image information to a temporary memory is avoided, this approach presents another serious shortcoming. Dedicating one plane of the frame buffer to the cursor information, cuts the range of colors available on the display to one half the total actual capacity of the frame buffer.
There is an alternative approach which also preserves the information in the frame buffer sometimes referred to as XORing. Instead of dedicating planes of the frame buffer to holding the cursor information, the multi-bit word in the buffer at those locations where a cursor is to appear is simply complemented. As a rule, the complement of the word will generate a color on the display which is different from the color of the underlying image thereby indicating the location of the cursor. Although this approach yields an efficient use of computational and memory resources in the computer, its main disadvantage is that it is visually quite unacceptable. On color displays it typically generates a multicolored cursor, the colors of which change as the cursor is moved over the image.
All of the above-described approaches to the software generation of cursors tend to share another set of problems which limit their appeal. They involve writing cursor information to the frame buffer which takes time and consumes the computational resources of a central processor. Consequently, the time and resources dedicated to supporting the cursor is not available to support the applications program which is generating the underlying image on the display. To prevent cursor support from excessively compromising the quality of the primary image on the display, a limit is typically placed on how frequently the cursor information in the frame buffer will be updated. Instead of changing the cursor information on the frame buffer prior to every refresh cycle, it is updated much less frequently. Placing such a limit on the frequency of update, however, makes the cursor appear to be sluggish and unable to respond smoothly to commands demanding rapid movement across the screen.
When operating in a windowed environment, the limitations of software generated cursors become more significant. A windowed environment is one in which a user may open multiple windows on the display giving him the ability to run a different applications program in each window. Typically, a window occupies only a portion of the display screen and if there is more than one window, it may overlap a lower window such that it occludes a portion of the lower window. The lower window is generally referred to as an inferior window. When the applications program has the task of supporting the cursor, the presence of windows complicates this task. This commonly leads to compromising cursor capability so as not to sacrifice too much of the quality of the images displayed in the windows. Thus, not only does the cursor appear to be sluggish but software generated hairline cursors appear to break apart or "tear" when the user attempts to move it rapidly from one location on the display to another. Such characteristics tend to be visually disconcerting and undesirable.
A hardware generated cursor is an alternative to the software generated cursor. The hardware dedicated to generating the cursor relieves the central processor and the applications program of a significant portion of the responsibility for cursor support. Consequently, the hardware generated cursors generally do not exhibit the sluggishness and tearing that characterizes the software generated cursors. On the other hand, they also tend to suffer from other inadequacies. For example, the only available hairline cursors are simple, single line cross hairs, which are usually constructed of a single color. If the selected color is the same as the color of the background, the cross hair will disappear when placed over the background. In addition, the available hairline cursors lack versatility. Sometimes the simple cross hair is not the desired or even the optimum choice for the user's particular application. An array of multicolored crosshairs may provide more effective visual display of the cursor with regard to the particular application.
Another shortcoming is that a hardware generated hairline cursor used in one window tends to interfere with applications in other windows. Typically the hairline cursor extends across the entire display. Thus, even though the user may only wish to use a hairline cursor in one particular window, the hairlines will cross other windows which are displaying other applications. This tends to be distracting since on some occasions it may obscure important details in other windows and, on other occasions, it tends to shift focus away from the window of immediate importance to the user.